/**
 * dva作用：进行状态管理
 * 使用步骤：配置dva -> 创建model -> 使用model
 * 配置dva：在config/config.js中配置dva
 * 创建model：在src/models下创建model文件，umi会自动加载
 * 使用model：在组件中使用model中的数据和方法
 * 原理：dva是基于redux的，它封装了redux，简化了redux的使用；
 * 1.核心概念：state: model中的核心数据
 *  effects: model中的异步action,用来发送异步请求
 *  reducers: model中的同步action,用来更新state
 */

import api from '@/network/api';

export default {
    // namespace: 'menu'是model的命名空间，用于区分多个model,应该保证唯一性
    namespace: 'menu',
    // state是model的核心数据，用于存储数据
    state: {
        menuList: [
            { id: 1,name: '云手机分配', path: '/dva/cloudPhone' },
            { id: 1,name: '客户管理', path: '/dva/userManager' },
        ]
    },
    reducers: {
        // reducers是model的同步action，用于更新state
        updataMenuList(state, { payload }) {
            return {
                ...state,
                menuList: payload
            }
        }
    },
    effects: {
        /**
         * effects是model的异步action，用于发送异步请求
         * 1.通过ES6的generator函数来实现异步请求 
         * 2.请求后端发送和接收必要的数据之后可以通过put方法触发reducers中的方法来更新state
         */
        *getMenuList({ payload }, { call, put }) {
            /**
             * call:用于调用异步请求，支持promise
             * put:用于触发reducers中的方法
             * select:用于获取state中的数据
             * 此处的put方法用于触发updataMenuList方法来更新state，会在call方法执行完之后自动执行
             */
            const {data: testList} = yield call(api.getGoods)
            yield put({
                type: 'updataMenuList',
                payload: testList
            })
        }
    }
}